import tushare as ts
import pandas as pd
from datetime import datetime, timedelta

# 初始化tushare接口
ts.set_token('fcc18694a4c5250ad123e13e5d6f93f22d6d3d3af47308f33d298e06')
pro = ts.pro_api()

# 获取当前日期
current_date = datetime.now().strftime('%Y%m%d')

# 计算前10个交易日的起始日期（简单估算）
start_date = (datetime.now() - timedelta(days=20)).strftime('%Y%m%d')

# 拉取所有股票基本信息
stock_basic_df = pro.stock_basic(
    list_status='L',  # 只获取上市状态的股票
    fields=[
        "ts_code",
        "symbol",
        "name",
        "area",
        "industry",
        "cnspell",
        "market",
        "list_date",
        "act_name",
        "act_ent_type"
    ]
)

# 打印股票基本信息
print("股票基本信息：")
print(stock_basic_df.head())

# 获取每只股票的前10个交易日的日线数据
all_daily_data = []

for index, row in stock_basic_df.iterrows():
    ts_code = row['ts_code']

    try:
        # 获取日线数据
        daily_data = pro.daily(
            ts_code=ts_code,
            start_date=start_date,
            end_date=current_date
        )

        # 如果数据不足10个交易日，跳过
        if len(daily_data) < 10:
            continue

        # 只保留前10个交易日的数据
        daily_data = daily_data.head(10)

        # 添加股票代码和名称到数据中
        daily_data['name'] = row['name']
        daily_data['industry'] = row['industry']

        # 合并到总数据表
        all_daily_data.append(daily_data)
    except Exception as e:
        print(f"获取 {ts_code} 数据时出错: {e}")

# 合并所有股票的日线数据
if all_daily_data:
    all_daily_df = pd.concat(all_daily_data, ignore_index=True)
else:
    all_daily_df = pd.DataFrame()

# 打印合并后的日线数据
print("\n所有股票的日线数据：")
print(all_daily_df.head())

# 数据分析
if not all_daily_df.empty:
    # 统计每只股票的平均涨跌幅
    avg_change = all_daily_df.groupby('ts_code')['pct_chg'].mean().reset_index()
    avg_change.columns = ['ts_code', 'avg_pct_chg']

    # 统计每只股票的最高价和最低价
    price_stats = all_daily_df.groupby('ts_code').agg({
        'high': 'max',
        'low': 'min'
    }).reset_index()
    price_stats.columns = ['ts_code', 'max_high', 'min_low']

    # 合并统计数据
    stats_df = pd.merge(avg_change, price_stats, on='ts_code')

    # 打印统计结果
    print("\n数据分析结果：")
    print(stats_df)